内在丰盈者,独行亦如众
我们先大致了解正常在 Spring 容器中使用 AOP 的基本步骤:
而 AOP 和 Spring 容器的整合,如上就是我们最终封装之后,对外暴露的流程。
这个文档讨论了如何使用 Spring AOP 实现动态代理。它包括了 AspectJExpressionPointcut、TargetSource、AdvisedSupport、ReflectiveMethodInvocation、AopProxy、JdkDynamicAopProxy 和 Cglib2AopProxy 等类的实现。
此外,文档还提供了一个 TigerInterceptor 类,该类演示了如何在代理对象上拦截方法调用并执行增强逻辑。最后,文档提供了一个测试类,该类演示了如何使用 Spring AOP 创建动态代理对象。
Spring 中的 Bean 作用域是指定 Bean 的生命周期范围,而 FactoryBean 则是一种特殊的Bean,其主要作用是创建其他 Bean 实例。
具体来说,FactoryBean 是一个接口,它提供了一个用于创建 Bean 实例的方法 getObject()。当容器需要获取 FactoryBean 所创建的 Bean 时,会调用 getObject() 方法返回实际的 Bean 实例。
与普通的 Bean 不同,FactoryBean 本身并不会被直接注入到其他 Bean 中使用,而是通过在 ApplicationContext 中配置 FactoryBean,然后通过 getBean() 方法获取实际的 Bean 实例。
与 Bean 作用域相比,FactoryBean 的概念更加专业化,它通常用于需要在 Bean 创建时进行一些复杂的初始化操作或者需要实现某种特定功能的场景。例如,Spring 中提供的 JdbcTemplate 就是通过 JdbcTemplateFactoryBean 来创建的。
Spring Aware 接口是一个标记接口,实现该接口的 Bean 可以访问 Spring 的核心组件 ApplicationContext 或其他特定的 Spring 框架对象。
这些组件包括 BeanFactory、ResourceLoader、ApplicationEventPublisher 等等。
实现该接口的 bean 需要实现 setApplicationContext() 方法,并在该方法中将 ApplicationContext 或其他 Spring 框架对象注入到该 bean 中。通过实现 Spring Aware 接口,bean 可以获取 Spring 容器中的其他 bean 和资源,从而更好地利用 Spring 框架的功能。
在 Spring 中,Bean 的生命周期由容器管理。当容器启动时,它会读取配置文件并创建 Bean 定义,然后通过这些定义来实例化 Bean。在 Bean 实例化的过程中,会按照一定的顺序调用一些特定的方法来完成 Bean 的初始化和销毁。
Bean 初始化的方法:
构造方法:在实例化 Bean 时,容器会调用 Bean 的构造方法创建 Bean 的实例。
实现 InitializingBean 接口:如果 Bean 实现了 InitializingBean 接口,容器会在 Bean 实例化之后调用它的 afterPropertiesSet() 方法。
配置 init-method 属性:在 Bean 配置文件中,可以通过设置 init-method 属性来指定 Bean 初始化时要调用的方法。
Bean 销毁的方法:
实现 DisposableBean 接口:如果 Bean 实现了 DisposableBean 接口,容器在销毁 Bean 之前会调用它的 destroy() 方法。
配置 destroy-method 属性:在 Bean 配置文件中,可以通过设置 destroy-method 属性来指定 Bean 销毁时要调用的方法。
需要注意的是,只有在容器正常关闭时,才会触发 Bean 的销毁方法。如果是容器发生异常或者是通过代码强制关闭容器,那么就不会触发 Bean 的销毁方法。
Spring 上下文(Context)和 BeanFactory 是 Spring 框架中的两个重要概念,它们之间存在继承关系。
BeanFactory 是 Spring 框架中最基本的容器,它是一个用于管理 Bean 实例的工厂。在 Spring 中,BeanFactory 提供了一些基本的功能,例如 Bean 的创建、配置、生命周期管理等。但是,BeanFactory 的功能相对较为简单,只有在使用时才会进行 Bean 的创建和初始化。
Spring 上下文则是在 BeanFactory 的基础上扩展而来的,它提供了更多的高级功能,例如国际化、AOP、事件发布等。与 BeanFactory 不同,Spring 上下文在启动时会一次性创建并初始化所有的 Bean 实例,这样可以提高应用程序的启动速度和运行效率。同时,Spring 上下文还提供了更多的扩展点,使得可以在运行时动态地加载和卸载 Bean 定义、注册和取消注册 BeanFactory 后置处理器和应用程序监听器等。
因此,Spring 上下文可以看作是 BeanFactory 的一个扩展,它在 BeanFactory 的基础上添加了更多的高级功能和扩展点。在实际应用中,通常使用 Spring 上下文来管理 Bean 实例和配置信息,而不是直接使用 BeanFactory。
歌手: